// 导入本地存储实现数据共享的持久化
import { getToken, setToken, removeToken,setTimeStamp} from "@/utils/auth";
import { login, getUserInfo,getUserInfoById } from "@/api/user";
import {resetRouter} from '@/router'
const state = {
  // 设置token为共享状态
  token: getToken(), //从本地缓存中获取Token
  userInfo: {}, //初始状态下用户信息为空
};
const mutations = {
  // 给Token赋值
  setToken(state, token) {
    state.token = token;
    // 同步给缓存
    setToken(token);
  },
  // 删除token
  removeToken(state) {
    state.token = null; //清除token
    removeToken(); //缓存清空
  },
  // 设置userInfo
  setUserInfo(state, result) {
    console.log(33,result);
    state.userInfo = result; //这是响应式
  },
  // 删除用户信息
  removeUserInfo(state){
    state.userInfo={} //null也可以但是在getters中引用容易报错
  }
};

const actions = {
  // 发起请求的时候，token状态的变化要通过actions
  async login(context, data) {
    // 调用登录的接口，获取服务器发送过来的Token
    const result = await login(data);
    console.log(4444,result)
    context.commit("setToken", result);//设置token
    setTimeStamp()
  },
  // 异步，发起用户信息的接口
  async getUserInfo(context) {
    const result = await getUserInfo();
    console.log('userinfo',result)
    // 获取用户头像信息
    const baseInfo=await getUserInfoById(result.userId)
    const obj={...result,...baseInfo}
    context.commit("setUserInfo", obj);
    return result; //这里为什么要返回 为后面埋下伏笔
  },
  // 退出登录操作
  logout(context){
    //删除Token
    context.commit('removeToken')
    // 删除用户资料
    context.commit('removeUserInfo')
        // 重置路由
        resetRouter()
          // 父模块 调用 子模块的action
    context.commit('permission/setRoutes', [], { root: true })
    // 子模块调用子模块的action 可以 将 commit的第三个参数 设置成  { root: true } 就表示当前的context不是子模块了 而是父模块
  }
};
export default {
  namespaced: true,
  state,
  mutations,
  actions,
};
